package Views.Tarjeta;

import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JTextField;










import Fisica.DAOCategoria;
import Fisica.DAOExtencion;
import Fisica.DAORelacion;
import Fisica.DAOTarjeta;
import Inteface.InterfaceGrilla;
import Inteface.InterfacePanel;
import Modelo.Tarjeta;
import Modelo.TarjetaCategoria;
import Modelo.TarjetaExtencion;
import Modelo.TarjetaRelacion;
import Views.Main.MainTarjeta;

import javax.swing.JComboBox;

import java.awt.Image;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.File;

import javax.swing.JButton;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.JCheckBox;

public class TarjetaCampos extends JPanel implements InterfaceGrilla, InterfacePanel {
	private JTextField tfID;
	private JComboBox cbCategoria, cbRelacionExt;
	private JTextField tfURLImg;
	private JButton btnBuscarImg;
	
	public JLabel lblImg, lbRelacionExt, lblNombre, lblApellido, lblDomicilio, lblDni;
	private JTextField tfPadronCodigo;
	private JTextField tfNumeroTarjeta;
	private JCheckBox chbExtencion;
	private JTextField tfNombre;
	private JTextField tfApellido;
	private JTextField tfDomicilio;
	private JTextField tfDNI;

	/**
	 * Create the panel.
	 */
	public TarjetaCampos(int id) {
		setLayout(null);
		this.setVisible(true);
		JLabel lblId = new JLabel("ID");
		lblId.setBounds(10, 11, 46, 14);
		add(lblId);
		
		tfID = new JTextField();
		tfID.setEditable(false);
		tfID.setBounds(76, 8, 55, 20);
		add(tfID);
		tfID.setColumns(10);
		
		JLabel lblCategoria = new JLabel("Categor\u00EDa");
		lblCategoria.setBounds(10, 99, 89, 14);
		add(lblCategoria);
		
		cbCategoria = new JComboBox();
		cbCategoria.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				
			}
		});
		cbCategoria.setBounds(66, 96, 86, 20);
		add(cbCategoria);
		this.initCategorias();
		
		lblImg = new JLabel("");
		lblImg.setBounds(50, 155, 180, 180);
		add(lblImg);
		
		btnBuscarImg = new JButton("Buscar");
		btnBuscarImg.setToolTipText("Buscar la ruta en la red.");
		btnBuscarImg.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				buscarImg();
			}
		});
		btnBuscarImg.setBounds(258, 121, 85, 23);
		add(btnBuscarImg);
		
		JLabel lblUrlImg = new JLabel("URL Img.");
		lblUrlImg.setBounds(10, 124, 60, 14);
		add(lblUrlImg);
		
		tfURLImg = new JTextField();
		tfURLImg.setToolTipText("Siempre buscar la ruta de la red.");
		tfURLImg.setBounds(66, 122, 182, 20);
		add(tfURLImg);
		tfURLImg.setColumns(10);
		
		JLabel lblPadron = new JLabel("Padron");
		lblPadron.setBounds(10, 36, 60, 14);
		add(lblPadron);
		
		tfPadronCodigo = new JTextField();
		tfPadronCodigo.setBounds(76, 33, 85, 20);
		add(tfPadronCodigo);
		tfPadronCodigo.setColumns(10);
		
		JLabel lblNmero = new JLabel("N\u00FAmero");
		lblNmero.setBounds(10, 60, 60, 14);
		add(lblNmero);
		
		tfNumeroTarjeta = new JTextField();
		tfNumeroTarjeta.setBounds(76, 57, 150, 20);
		add(tfNumeroTarjeta);
		tfNumeroTarjeta.setColumns(10);
		
		chbExtencion = new JCheckBox("Extenci\u00F3n");
		chbExtencion.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				esExtencion();
			}
		});
		chbExtencion.setToolTipText("Es extenci\u00F3n de otra tarjeta?");
		chbExtencion.setBounds(246, 57, 89, 23);
		add(chbExtencion);
		
		lbRelacionExt = new JLabel("Relaci\u00F3n");
		lbRelacionExt.setEnabled(false);
		lbRelacionExt.setBounds(330, 158, 77, 14);
		add(lbRelacionExt);
		
		cbRelacionExt = new JComboBox();
		cbRelacionExt.setEnabled(false);
		cbRelacionExt.setToolTipText("Relaci\u00F3n con el titular");
		cbRelacionExt.setBounds(388, 155, 120, 20);
		add(cbRelacionExt);
		
		lblNombre = new JLabel("Nombre");
		lblNombre.setEnabled(false);
		lblNombre.setBounds(330, 186, 55, 14);
		add(lblNombre);
		
		tfNombre = new JTextField();
		tfNombre.setEnabled(false);
		tfNombre.setBounds(388, 183, 120, 20);
		add(tfNombre);
		tfNombre.setColumns(10);
		
		lblApellido = new JLabel("Apellido");
		lblApellido.setEnabled(false);
		lblApellido.setBounds(330, 211, 55, 14);
		add(lblApellido);
		
		lblDomicilio = new JLabel("Domicilio");
		lblDomicilio.setEnabled(false);
		lblDomicilio.setBounds(330, 236, 55, 14);
		add(lblDomicilio);
		
		lblDni = new JLabel("DNI");
		lblDni.setEnabled(false);
		lblDni.setBounds(330, 261, 46, 14);
		add(lblDni);
		
		tfApellido = new JTextField();
		tfApellido.setEnabled(false);
		tfApellido.setBounds(388, 208, 120, 20);
		add(tfApellido);
		tfApellido.setColumns(10);
		
		tfDomicilio = new JTextField();
		tfDomicilio.setEnabled(false);
		tfDomicilio.setBounds(388, 233, 120, 20);
		add(tfDomicilio);
		tfDomicilio.setColumns(10);
		
		tfDNI = new JTextField();
		tfDNI.setEnabled(false);
		tfDNI.setBounds(388, 258, 120, 20);
		add(tfDNI);
		tfDNI.setColumns(10);
		this.initRelaciones();
		
		
		this.init(id);

	}
	
	/* manejo si esta tarjeta es extencion de otra. */
	public void esExtencion(){
		boolean select = chbExtencion.isSelected();
		
		lbRelacionExt.setEnabled(select);
		cbRelacionExt.setEnabled(select);
		
		lblNombre.setEnabled(select);
		lblApellido.setEnabled(select);
		lblDomicilio.setEnabled(select);
		lblDni.setEnabled(select);
		
		tfNombre.setEnabled(select);
		tfApellido.setEnabled(select);
		tfDomicilio.setEnabled(select);
		tfDNI.setEnabled(select);
		
		
		if(!select){			
			cbRelacionExt.setSelectedIndex(0);			
		}		
	}

	@Override
	public void guardar() {
		try {
			DAOTarjeta tc = new DAOTarjeta();
			int id = -1;
			if(tfID.getText().length() > 0)
			 id = Integer.parseInt(tfID.getText());
			
			Tarjeta t = tc.get(Integer.valueOf(id));		
			
//			"ID", "Padron", "Numero", "Categoria", "Extencion", "Relacion", "Foto"
			if(tfPadronCodigo.getText().length()>0){
				t.setPadron_codigo(Integer.parseInt(tfPadronCodigo.getText()));
			}
			if(tfNumeroTarjeta.getText().length()>0)
				t.setNumero(tfNumeroTarjeta.getText());
			
			if (cbCategoria.getSelectedIndex() > 0)
				t.setIdCategoria(DAOCategoria.get(cbCategoria.getSelectedItem().toString()).getId());
			
			
//			if (tfCodigo.getText().length() > 0)
//				t.setCodigo(tfCodigo.getText());
//			else t.setCodigo("");
			
			t.setFoto("");
			if(tfURLImg.getText().length()>0)
				t.setFoto(tfURLImg.getText());
			
			TarjetaExtencion e = new TarjetaExtencion();
			
			if(chbExtencion.isSelected()){
				
				t.setExtencion("1");
				t.setIdRelacion(DAORelacion.get(cbRelacionExt.getSelectedItem().toString()).getId());
				
				if(tfNombre.getText().length()>0)
					e.setNombre(tfNombre.getText());
				if(tfApellido.getText().length()>0)
					e.setApellido(tfApellido.getText());
				if(tfDomicilio.getText().length()>0)
					e.setDomicilio(tfDomicilio.getText());
				if(tfDNI.getText().length()>0)
					e.setDni(tfDNI.getText());
				
			}else{
				t.setExtencion("0");
			}
			
			
			if(id == -1){
				tc.insert(t);
				if(chbExtencion.isSelected()){
					e.setId_tarjeta(t.getId());
					DAOExtencion.insert(e);
				}
			}				
			else{
				tc.update(t);
				if(chbExtencion.isSelected()){
					e.setId_tarjeta(t.getId());
					DAOExtencion.update(e);
				}
			}
			
			this.cancelar();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		
	}

	@Override
	public void cancelar() {
		tfID.setText("");
		tfPadronCodigo.setText("");
		tfNumeroTarjeta.setText("");
		chbExtencion.setSelected(false);
		this.esExtencion();
		cbCategoria.setSelectedIndex(0);
		cbRelacionExt.setSelectedIndex(0);
		tfURLImg.setText("");
		lblImg.removeAll();
	}

	public Object primero() {
		DAOTarjeta dt = new DAOTarjeta();
		return (Tarjeta) dt.getFirst();		
	}

	public Object ultimo() {
		DAOTarjeta dt = new DAOTarjeta();
		return (Tarjeta) dt.getLast();
	}

	public Object anterior() {
		DAOTarjeta dt = new DAOTarjeta();
		if (tfID.getText().length()>0)
			return (Tarjeta) dt.getPre(Integer.parseInt(tfID.getText()));
		else return primero();
	}

	public Object posterior() {
		DAOTarjeta dt = new DAOTarjeta();
		if (tfID.getText().length()>0)
			return (Tarjeta) dt.getPost(Integer.parseInt(tfID.getText()));
		else return primero();
	}

	@Override
	public int setprimero() {
		DAOTarjeta dt = new DAOTarjeta();
//		MainTarjeta.idTarjeta = ((Tarjeta) dt.getFirst()).getId();
		return -1;
		
	}

	@Override
	public int setultimo() {
		DAOTarjeta dt = new DAOTarjeta();
//		MainTarjeta. =  ((Tarjeta) dt.getLast()).getId();
		return -1;
		
	}

	@Override
	public int setanterior() {
		DAOTarjeta dt = new DAOTarjeta();
//		MainTarjeta.tc = ((Tarjeta) dt.getPre(Integer.parseInt(tfID.getText()))).getId();
		return -1;
		
	}

	@Override
	public int setposterior() {
		DAOTarjeta dt = new DAOTarjeta();
//		MainTarjeta.tc = ((Tarjeta) dt.getPost(Integer.parseInt(tfID.getText()))).getId();
		return -1;
	}
	
	@Override
	public boolean grilla() {
		return false;
	}

	@Override
	public boolean campos() {
		return true;
	}

	@Override
	public int getPanel() {
		return 0;
	}

	@Override
	public void init(int id) {	
		try {
			this.finNuevo();
			if(id > 0){
				DAOTarjeta th = new DAOTarjeta();
				DAORelacion rh = new DAORelacion();
				DAOCategoria ch = new DAOCategoria();
				
				Tarjeta t = (Tarjeta) th.get(id);		
				tfID.setText(Integer.toString(t.getId()));
				tfPadronCodigo.setText(Integer.toString(t.getPadron_codigo()));
				tfNumeroTarjeta.setText(t.getNumero());
				if(t.getExtencion() == "1"){
					chbExtencion.setSelected(true);
					cbRelacionExt.setSelectedItem(rh.get(t.getIdRelacion()).getRelacion());
				}else{
					chbExtencion.setSelected(false);
					cbRelacionExt.setSelectedItem("");
				}
				cbCategoria.setSelectedItem(ch.get(t.getIdRelacion()).getcategoria());
				
				initCategorias();
				initRelaciones();
				
			}else{
				cancelar();
			}
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}		
	}

	@Override
	public int getRowSelected() {
		return -1;
	}
	
	//CARGA LISTA DE CATEGORIAS 
    public void initCategorias(){
        cbCategoria.removeAllItems();
        List<Object>list = null;
        DAOCategoria dt = new DAOCategoria();
        TarjetaCategoria t;
        list = dt.getList();
        cbCategoria.addItem("");  
        for(Object o: list) {
        	t = (TarjetaCategoria) o;
            cbCategoria.addItem(t.getcategoria()); 
           } 
        }
    
  //CARGA LISTA DE RELACIONES 
    public void initRelaciones(){
        cbRelacionExt.removeAllItems();
        List<Object>list = null;
        DAORelacion dt = new DAORelacion();
        TarjetaRelacion t;
        list = dt.getList();
        cbRelacionExt.addItem("");  
        for(Object o: list) {
        	t = (TarjetaRelacion) o;
        	cbRelacionExt.addItem(t.getRelacion()); 
           } 
        }
     

	@Override
	public void nuevo() {
		//boolean nuevo = !tfModelo.isEnabled();
		tfPadronCodigo.setText(""); //Enabled(nuevo);
		tfNumeroTarjeta.setText(""); //.setEditable(nuevo);
		tfURLImg.setText(""); //.setEnabled(nuevo);

		cbCategoria.setSelectedIndex(0);
		cbRelacionExt.setSelectedIndex(0);
		chbExtencion.setEnabled(false);
	}
	
	public void finNuevo() {
	}
	
	public void buscarImg(){
		FileNameExtensionFilter filtro = new FileNameExtensionFilter("Formato de Archivo JPEG(*.JPG;*.JPEG,*.PNG", "jpg","jpeg","png");
		JFileChooser archivo = new JFileChooser();
		archivo.addChoosableFileFilter(filtro);
		archivo.setDialogTitle("Abrir archivo");
		File ruta = new File("C:/");
		archivo.setCurrentDirectory(ruta);
		
		int ventana = archivo.showOpenDialog(null);
		if(ventana == JFileChooser.APPROVE_OPTION){
			File file = archivo.getSelectedFile();
			tfURLImg.setText(String.valueOf(file)); //JTextField
			Image img = getToolkit().getImage(tfURLImg.getText());
			img = img.getScaledInstance(180, 180, Image.SCALE_DEFAULT);
			lblImg.setIcon(new ImageIcon(img));
			
		}
	}
}
